-- KEY[1]: 用户防重领取记录
local redPacketConsumerKey = KEYS[1];
-- KEY[2]: 红包雨活动key
local redPacketRainKey = KEYS[2];
-- KEY[3]: 用户红包领取记录
local redPacketRecordKey = KEYS[3];
-- KEY[4]: 用户编号
local userId = KEYS[4];
local result = {};
-- 判断用户是否领取过
if redis.call('hexists', redPacketConsumerKey, userId) == 1 then
  result['code'] = '1';
  return cjson.encode(result); -- json序列化， JSONObject.toJson(Object) {"code":1}
else
   -- 从预分配红包中获取红包数据
   local redPacket = redis.call('rpop', redPacketRainKey);
   if redPacket
   then
      local data =   cjson.decode(redPacket); -- json反序列化， JSONObject.parseJson()
      -- 加入用户ID信息
      data['userId'] = userId;
     -- 把用户编号放到去重的哈希，value设置为红包编号
      redis.call('hset', redPacketConsumerKey, userId, data['redPacketId']);
      --  用户和红包放到已消费队列里
      redis.call('lpush', redPacketRecordKey, cjson.encode(data));
     -- 组装成功返回值
      result['redPacketId'] = data['redPacketId'];
      result['code'] = '0';
      result['amount'] = data['amount'];
      return cjson.encode(result);
   else
      -- 抢红包失败
      result['code'] = '-1';
      return cjson.encode(result);
   end
end